#include "lista.h"

typedef struct arvoreBin
{
        int frequencia;
        char produto[64];
        Cidade *compra;
        Cidade *vende;
        struct arvoreBin *pai;
        struct arvoreBin *esq;
        struct arvoreBin *dir;
} ArvoreSA;

ArvoreSA *(Busca(char *produto,ArvoreSA *no));
void InsereArvore(ArvoreSA **raiz,char *produto,char *compra,char *vende,ArvoreSA *pai);
ArvoreSA *(insere_arvore_sa(ArvoreSA *raiz,char *compra,char *vende,char *produto));
void Imprime(ArvoreSA *p);
void libera_arvore_sa(ArvoreSA **lixo);
ArvoreSA *(cria_arvore_sa());
void consulta_arvore_sa (ArvoreSA *raiz,char *produto);

int checaHetero(ArvoreSA** no);
void Rotaciona (ArvoreSA **busca);
void RotacionaEsq (ArvoreSA **no, ArvoreSA *pai);
void RotacionaDir (ArvoreSA **no, ArvoreSA *pai);
void AchaRaiz(ArvoreSA **no);
void RotacionaHetEsq(ArvoreSA **no, ArvoreSA *pai);
void RotacionaHetDir(ArvoreSA **no, ArvoreSA *pai);